//
// CLiveCapture.h
//

#ifndef __H_CLiveCapture__
#define __H_CLiveCapture__

#include "CMsgStation.h"
#include "GlobalDefs.h"

class CLiveCapture : public CMsgStation
{
private:
	Work_Mode		mMode;
	BOOL			mNotifying;
	BOOL			mVMRPreferred;     // Flag to try VMR
	BOOL			mGrabEnabled;      // Flag to use image grabber filter

	// Video settings
	CString			mVideoDevice;      // Friendly name
	Device_Type		mDeviceType;
	long			mVideoConnector;   // Physical type
	Signal_Resolution mResolution;

	// Audio settings
	CString			mAudioDevice;      // Friendly name
	long			mAudioConnector;   // Index
	double			mAudioMixLevel;

	// Output settings
	Encoding_Type	mEncodingType;
	long			mOutputWidth;
	long			mOutputHeight;
	CString			mOutputFile;
	CString			mGrabFolder;

public:
	CLiveCapture();
	~CLiveCapture();

	void SetWorkMode(Work_Mode inMode);
	Work_Mode GetWorkMode(void);
	void SetNotifying(BOOL inEnabled);

	void SetVMRPreferred(BOOL inPreferred);
	BOOL IsVMRPreferred(void);

	void SetImageGrab(BOOL inEnabled);
	BOOL IsGrabEnabled(void);

	void SetVideoDevice(const char * inDevice);
	CString& GetVideoDevice(void);

	void SetDeviceType(Device_Type inType);
	Device_Type GetDeviceType(void);

	void SetAudioDevice(const char * inDevice);
	CString& GetAudioDevice(void);

	void SetVideoConnector(long inConnector);
	long GetVideoConnector(void);

	void SetVideoResolution(Signal_Resolution inResolution);
	Signal_Resolution GetVideoResolution();

	void SetAudioConnector(long inConnector);
	long GetAudioConnector(void);
	BOOL IsAudioConnectorValid(void);

	void SetAudioMixLevel(double inLevel);
	double GetAudioMixLevel(void);

	void SetEncodingType(Encoding_Type inType);
	void ValidateEncodingType(void);
	Encoding_Type GetEncodingType(void);

	void SetImageSize(long inWidth, long inHeight);
	void GetImageSize(long * outWidth, long * outHeight);

	void SetOutputFile(const char * inFile);
	CString& GetOutputFile(void);

	void SetGrabFolder(const char * inFolder);
	CString& GetGrabFolder(void);

protected:
	void DecideDeviceType(const char * inName);
};

#endif // __H_CLiveCapture__